package com.example.demo.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author jack
 * @Description: 自定义响应结构, 转换类
 */
public class JsonUtils {


  private static final Log logger = LogFactory.getLog(JsonUtils.class);
  /**
   * 定义jackson对象
   */
  private static final ObjectMapper MAPPER = new ObjectMapper();

  /**
   * 将对象转换成json字符串。
   * <p>Title: pojoToJson</p>
   * <p>Description: </p>
   *
   * @param data
   * @return
   */
  public static String objectToJson(Object data) {
    try {
      String string = MAPPER.writeValueAsString(data);
      return string;
    } catch (JsonProcessingException e) {
      logger.warn("将对象转换成json字符串失败", e);
    }
    return null;
  }

  /**
   * 将json结果集转化为对象
   *
   * @param jsonData json数据
   * @param beanType 对象中的object类型
   * @return
   */
  public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
    try {
      T t = MAPPER.readValue(jsonData, beanType);
      return t;
    } catch (Exception e) {
      logger.error("json结果集转化为对象失败", e);
    }
    return null;
  }

  /**
   * 将json数据转换成pojo对象list
   * <p>Title: jsonToList</p>
   * <p>Description: </p>
   *
   * @param jsonData
   * @param beanType
   * @return
   */
  public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
    JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
    try {
      List<T> list = MAPPER.readValue(jsonData, javaType);
      return list;
    } catch (Exception e) {
      logger.warn("将json数据转换成pojo对象list失败", e);
//            throw new Exception("json结果集转化为对象 error");
    }
    return null;
  }

}
